package com.neu.util;

import java.io.Serializable;




public class JsonResult<E> implements Serializable {
	
	/**
	 * 序列化就是一种用来处理对象流的机制，所谓对象流也就是将对象的内容进行流化。
	 * 可以对流化后的对象进行读写操作，
	 * 也可将流化后的对象传输于网络之间。
	 * 序列化是为了解决在对对象流进行读写操作时所引发的问题。
	 */
	
	
	 /**
	  * 序列化版本
	  */
	private static final long serialVersionUID = 1L;
		private Integer state;
	    /**描述信息*/
	    private String message;
	    /**存放token密钥，设置登录验证 功能*/
	    private String token;
	    /**数据*/
	    private E data;
	    
	    private Integer count;

	    
	    public Integer getCount() {
			return count;
		}


		public void setCount(Integer count) {
			this.count = count;
		}


		public void setData(E data) {
			this.data = data;
		}


		/**
	     * 序列化的实现：将需要被序列化的类实现Serializable接口，该接口没有需要实现的方法，
	   *implements Serializable只是为了标注该对象是可被序列化的，
	     * 然后使用一个输出流(如：FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象，
	     * 接着，使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态)，
	     * 要恢复的话则用输入流。
		简单来说 序列化就是把Java对象储存在某一地方（硬盘、网络），以便于传输
	     */
	    
	    
	    public JsonResult() {
	    }
	    /**
	     * 输出json构造方法
	     * @param state 输出状态码
	     * @param data 输出的数据体
	     * @param count 输出的数据个数
	     */
	    
	    public JsonResult(Integer state,E data, Integer count) {
	    	this.state = state;
	    	this.data = data;
	    	this.count = count;
	        ResultCode resultCode = new ResultCode();
	        this.message = resultCode.getResultMessage(state);
	    }
	    /**
	     * 输出json构造方法
	     * @param state 输出状态码
	     * @param data 输出的数据体
	     * @param message 返回的字符串信息
	     */
	    
	    public JsonResult(Integer state,E data, String message) {
	    	this.state = state;
	    	this.data = data;
	    	this.message = message;
	    }
	    


	    //将状态码传给构造方法初始化对象
	    public  JsonResult(Integer state) {
	        this.state = state;
	    }


	    //将状态码和数据传给构造方法初始化对象
	    public  JsonResult(Integer state, E data) {
	        this.state = state;
	        this.data = data;
	        ResultCode resultCode = new ResultCode();
	        this.message = resultCode.getResultMessage(state);
	    }
	    
	    
	    

	    public String getToken() {
			return token;
		}


		public void setToken(String token) {
			this.token = token;
		}


		//如果有异常,直接将异常传递给构造方法初始化对象
	    public  JsonResult(Throwable e) {
	        this.message=e.getMessage();
	    }
	    /**以及属性的get和set方法*/
	    public Integer getState() {
	        return state;
	    }

	    public void setState(Integer state) {
	        this.state = state;
	    }

	    public String getMessage() {
	        return message;
	    }

	    public void setMessage(String message) {
	        this.message = message;
	    }

	    public E getData() {
	        return data;
	    }


	    

}
